package com.bird.thread.base.stopthread;

/**
 * @author sijunqiang
 * @data 2021/6/26 15:29
 * @description: 中断线程的最佳实践-1：
 * catch了 InterruptException 之后的优先选择：在方法签名中抛出异常。
 * 那么在run方法中 就会强制try/catch
 */
public class RightWayStopThreadWitInProd1 implements Runnable {



    @Override
    public void run() {
        int id=0;
        while (true) {
            System.out.println("go invoke other method!!!");
            try {
                invoke_other_method(id); // run方法里面不能 抛出异常
                id++;
                System.out.println("after handle method content!!! id= "+id);
            } catch (InterruptedException e) {
                // 保存日志 或者停止程序
                System.out.println("invoke_other_method throw exception! save  id:"+id);
                e.printStackTrace();
                break;
             }

        }
    }

    // run 方法里面调用他人的方法时后 需要抛出异常 不能写成try/catch方法的操作。
    private void invoke_other_method(int id) throws InterruptedException {
        System.out.println("other term handle method...");
        Thread.sleep(2000);

    }

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new RightWayStopThreadWitInProd1());
        thread.start();
        Thread.sleep(1000);
        thread.interrupt();
    }
}
